﻿using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web.UI;
using SharedLibraries.Constants;
using ThangNM_LIB.FUNC;

namespace ThangNM.UserControl
{
    public partial class ToolUC : System.Web.UI.UserControl
    {
        public byte[] bImage
        {
            get { return (byte[])ViewState["bImage"]; }
            set { ViewState["bImage"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
            if (!IsPostBack)
                SetView(Convert.ToInt32(hfKey.Value));
            }
            catch (Exception ex)
            {
                lblMsg.Text = hfKey.Value;
            }
        }

        public void PreviewByFunction(Int32 iType)
        {
            //udpTool.Visible = false;
            //pnlCalculator.Visible = false;
            //switch (iType)
            //{
            //    case Tool_Type_C.Count_Character: udpTool.Visible = true;
            //        //lblSupport.Text = "Đếm số lượng ký tự trong một đoạn văn.";
            //        txtInput.Visible = true;
            //        lblResult.Visible = true;
            //        break;
            //    case Tool_Type_C.Count_Word: udpTool.Visible = true;
            //        //lblSupport.Text = "Đếm số lượng từ trong một đoạn văn.";
            //        txtInput.Visible = true;
            //        lblResult.Visible = true;
            //        break;
            //    case Tool_Type_C.Upper_Case: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển tất cả các ký tự trong văn bản thành chữ hoa.";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Lower_Case: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển tất cả các ký tự trong văn bản thành chữ thường.";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Upper_Firt_Char: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển tất cả các ký tự đầu tiên của các từ trong văn bản thành chữ hoa.";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Reverse: udpTool.Visible = true;
            //        //lblSupport.Text = "Viết ngược lại đoạn văn bản";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.MD5_Encode: udpTool.Visible = true;
            //        //lblSupport.Text = "Mã hóa MD5";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.SHA1_Encode: udpTool.Visible = true;
            //        //lblSupport.Text = "Mã hóa SHA1";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Url_Encode: udpTool.Visible = true;
            //        //lblSupport.Text = "Mã hóa url";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Url_Decode: udpTool.Visible = true;
            //        //lblSupport.Text = "Giải mã url";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Html_Encode: udpTool.Visible = true;
            //        //lblSupport.Text = "Mã hóa html";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        txtInput.Rows = 5;
            //        txtOutput.Rows = 5;
            //        txtInput.Columns = 100;
            //        txtOutput.Columns = 100;
            //        txtInput.TextMode = TextBoxMode.MultiLine;
            //        txtOutput.TextMode = TextBoxMode.MultiLine;
            //        break;
            //    case Tool_Type_C.Html_Decode: udpTool.Visible = true;
            //        //lblSupport.Text = "Giải mã url";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Generator_Password: udpTool.Visible = true;
            //        //lblSupport.Text = "Công cụ tự động sinh mật khẩu an toàn";
            //        lblResult.Visible = true;
            //        Generator_Password();
            //        break;
            //    case Tool_Type_C.Generator_Number: udpTool.Visible = true;
            //        //lblSupport.Text = "Công cụ tự động sinh ra 1 số bất kỳ năm trong khoảng cho trước";
            //        divA2Z.Visible = true;
            //        lblResult.Visible = true;
            //        txtBegin.Text = "0";
            //        txtEnd.Text = "100";
            //        break;
            //    case Tool_Type_C.QRCode: udpTool.Visible = true;
            //        //lblSupport.Text = "Công cụ sinh ra ảnh chứa qrcode (mã vạch 2 chiều)";
            //        txtInput.Visible = true;
            //        break;
            //    case Tool_Type_C.BarCode: udpTool.Visible = true;
            //        //lblSupport.Text = "Công cụ sinh ra ảnh chứa barcode (mã vạch 1 chiều)";
            //        txtInput.Visible = true;
            //        break;
            //    case Tool_Type_C.Image_Watermark: udpTool.Visible = true;
            //        //lblSupport.Text = "Công cụ đóng dấu ảnh";
            //        fuImage.Visible = true;
            //        txtText.Visible = true;
            //        divWaterMark.Visible = true;
            //        btnOK.Visible = false;
            //        btnUpload.Visible = true;
            //        txtFontSize.Text = "30";
            //        break;
            //    case Tool_Type_C.String_Hex: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi chuỗi xang dạng hexa (cơ số 16)";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Hex_String: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi hexa xang dạng chuỗi";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.String_Binary: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi chuỗi xang dạng binary (nhị phân)";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Binary_String: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi binary xang dạng chuỗi";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.String_Base64: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi chuỗi xang dạng base64";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Base64_String: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi base64 xang dạng chuỗi";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Decimal_Binary: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi decimal xang dạng binary";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Binary_Decimal: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi binary xang dạng decimal";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Decimal_Hex: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi decimal xang dạng hexa";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Hex_Decimal: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi hexa xang dạng decimal";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Color_Hex: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi màu thành mã màu Hexa";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Color_RBG: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi màu thành mã màu RBG";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Color_Name: udpTool.Visible = true;
            //        //lblSupport.Text = "Chuyển đổi màu thành tên màu";
            //        txtInput.Visible = true;
            //        txtOutput.Visible = true;
            //        break;
            //    case Tool_Type_C.Calculator: pnlCalculator.Visible = true;
            //        //lblSupport.Text = "Máy tính bỏ túi";
            //        break;
            //}
        }

        protected void btnOK_Click(object sender, EventArgs e)
        {
            //MsgUC1.setClearMsg();
            try
            {
                txtOutput.Text = "";
                imgOutput.Visible = false;
                lblResult.Text = "";
                System.Threading.Thread.Sleep(2000);
                Int32 iKey = -1;
                Int32.TryParse(hfKey.Value, out iKey);
                //switch (iKey)
                //{
                //    case Tool_Type_C.Count_Character: Count_Character(); break;
                //    case Tool_Type_C.Count_Word: Count_Word(); break;
                //    case Tool_Type_C.Upper_Case: Upper_Case(); break;
                //    case Tool_Type_C.Lower_Case: Lower_Case(); break;
                //    case Tool_Type_C.Upper_Firt_Char: Upper_Firt_Char(); break;
                //    case Tool_Type_C.Reverse: Reverse(); break;
                //    case Tool_Type_C.MD5_Encode: MD5_Encode(); break;
                //    case Tool_Type_C.SHA1_Encode: SHA1_Encode(); break;
                //    case Tool_Type_C.Url_Encode: Url_Encode(); break;
                //    case Tool_Type_C.Url_Decode: Url_Decode(); break;
                //    case Tool_Type_C.Html_Encode: Html_Encode(); break;
                //    case Tool_Type_C.Html_Decode: Html_Decode(); break;
                //    case Tool_Type_C.Generator_Password: Generator_Password(); break;
                //    case Tool_Type_C.Generator_Number: Generator_Number(); break;
                //    case Tool_Type_C.QRCode: QRCode(); break;
                //    case Tool_Type_C.BarCode: BarCode(); break;
                //    case Tool_Type_C.Image_Watermark: Image_Watermark(); break;
                //    case Tool_Type_C.String_Hex: String_Hex(); break;
                //    case Tool_Type_C.Hex_String: Hex_String(); break;
                //    case Tool_Type_C.String_Binary: String_Binary(); break;
                //    case Tool_Type_C.Binary_String: Binary_String(); break;
                //    case Tool_Type_C.String_Base64: String_Base64(); break;
                //    case Tool_Type_C.Base64_String: Base64_String(); break;
                //    case Tool_Type_C.Decimal_Binary: Decimal_Binary(); break;
                //    case Tool_Type_C.Binary_Decimal: Binary_Decimal(); break;
                //    case Tool_Type_C.Decimal_Hex: Decimal_Hex(); break;
                //    case Tool_Type_C.Hex_Decimal: Hex_Decimal(); break;
                //    case Tool_Type_C.Color_Hex: Color_Hex(); break;
                //    case Tool_Type_C.Color_RBG: Color_RBG(); break;
                //    case Tool_Type_C.Color_Name: Color_Name(); break;
                //}
            }
            catch
            {
                //MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
        }

        protected void btnUpload_Click(object sender, EventArgs e)
        {
            try
            {
                Image_Watermark();
            }
            catch (Exception ex)
            {
                //var master = Master as ThangNM.PublicInterface.Home_New;
                //if (master != null)
                //    master.SetMessage(ConstEx.FunctionSetMsg.WARNING, ex.Message);
            }
        }

        protected void Count_Character()
        {
            lblResult.Text = txtInput.Text.Length.ToString();
        }

        protected void Count_Word()
        {
            lblResult.Text = StringEx.TrimEx(txtInput.Text).Split(' ').Length.ToString();
        }

        protected void Upper_Case()
        {
            txtOutput.Text = txtInput.Text.ToUpper();
        }

        protected void Lower_Case()
        {
            txtOutput.Text = txtInput.Text.ToLower();
        }

        protected void Upper_Firt_Char()
        {
            txtOutput.Text = StringEx.UppercaseFirst(txtInput.Text);
        }

        protected void Reverse()
        {
            txtOutput.Text = StringEx.Reverse(txtInput.Text);
        }

        protected void MD5_Encode()
        {
            txtOutput.Text = Security.MD5_Encrypt(txtInput.Text);
        }

        protected void SHA1_Encode()
        {
            txtOutput.Text = Security.SHA1_Encrypt(txtInput.Text);
        }

        protected void Url_Encode()
        {
            txtOutput.Text = Server.UrlEncode(txtInput.Text);
        }

        protected void Url_Decode()
        {
            txtOutput.Text = Server.UrlDecode(txtInput.Text);
        }

        protected void Html_Encode()
        {
            txtOutput.Text = Server.HtmlEncode(txtInput.Text);
        }

        protected void Html_Decode()
        {
            txtOutput.Text = Server.HtmlDecode(txtInput.Text);
        }

        protected void Generator_Password()
        {
            lblResult.Text = Security.RandomPassword();
        }

        protected void Generator_Number()
        {
            if (Convert.ToInt32(txtEnd.Text) < Convert.ToInt32(txtBegin.Text))
            {
                txtBegin.Focus();
                txtInput.Attributes["onfocus"] = "javascript:this.select();";
                return;
            }
            lblResult.Text = OtherEx.Random_Number(Convert.ToInt32(txtBegin.Text), Convert.ToInt32(txtEnd.Text)).ToString();
        }

        protected void QRCode()
        {
            imgOutput.Visible = false;
            FSE.SOFT.QRCode.Codec.QRCodeEncoder qrCodeEncoder = new FSE.SOFT.QRCode.Codec.QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = FSE.SOFT.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeVersion = 5;
            qrCodeEncoder.QRCodeScale = 5;
            qrCodeEncoder.QRCodeErrorCorrect = 0;
            var bmpImage = qrCodeEncoder.Encode(txtInput.Text);
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            byte[] imageBytes = stream.ToArray();
            imgOutput.ImageUrl = @"data:image/gif;base64," + Convert.ToBase64String(imageBytes);
            imgOutput.Visible = true;
        }

        protected void BarCode()
        {
            imgOutput.Visible = false;
            if (txtInput.Text.Length > 18)
            {
                txtInput.Focus();
                txtInput.Attributes["onfocus"] = "javascript:this.select();";
                return;
            }
            FSE.SOFT.QRCode.Codec.BarCode.Barcode barcode = new FSE.SOFT.QRCode.Codec.BarCode.Barcode();
            barcode.Alignment = FSE.SOFT.QRCode.Codec.BarCode.AlignmentPositions.CENTER;
            barcode.LabelPosition = FSE.SOFT.QRCode.Codec.BarCode.LabelPositions.BOTTOMCENTER;
            barcode.IncludeLabel = false;
            var type = FSE.SOFT.QRCode.Codec.BarCode.TYPE.CODE128;
            Int32 W = 150;
            Int32 H = 50;
            var img = new Bitmap(barcode.Encode(type, txtInput.Text, System.Drawing.Color.Black, System.Drawing.Color.White, W, H));
            byte[] imageBytes = FSE.SOFT.QRCode.Codec.Util.QRCodeUtility.convertBitmapToByte(img);
            imgOutput.ImageUrl = @"data:image/gif;base64," + Convert.ToBase64String(imageBytes);
            imgOutput.Visible = true;
        }

        protected void Image_Watermark()
        {
            if (String.IsNullOrEmpty(fuImage.PostedFile.FileName))
            {
                fuImage.Focus();
                return;
            }
            if (String.IsNullOrEmpty(txtText.Text))
            {
                txtText.Focus();
                return;
            }
            //Get the file name.
            string fileName = Path.GetFileNameWithoutExtension(fuImage.PostedFile.FileName) + "_watermark.png";

            //Read the File into a Bitmap.
            using (Bitmap bmp = new Bitmap(fuImage.PostedFile.InputStream, false))
            {
                using (Graphics grp = Graphics.FromImage(bmp))
                {
                    //Set the Color of the Watermark text.
                    Brush brush = new SolidBrush(System.Drawing.ColorTranslator.FromHtml(txtColor.Text));

                    //Set the Font and its size.
                    Font font = new System.Drawing.Font(ddlFont.SelectedValue, Convert.ToInt32(txtFontSize.Text), FontStyle.Bold, GraphicsUnit.Pixel);

                    //Determine the size of the Watermark text.
                    SizeF textSize = new SizeF();
                    textSize = grp.MeasureString(txtText.Text, font);

                    //Position the text and draw it on the image.
                    Point position = new Point((bmp.Width - ((int)textSize.Width + 10)), (bmp.Height - ((int)textSize.Height + 10)));
                    grp.DrawString(txtText.Text, font, brush, position);

                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        //Save the Watermarked image to the MemoryStream.
                        bmp.Save(memoryStream, ImageFormat.Png);
                        memoryStream.Position = 0;

                        //Start file download.
                        Response.Clear();
                        Response.ContentType = "image/png";
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);

                        //Write the MemoryStream to the Response.
                        memoryStream.WriteTo(Response.OutputStream);
                        Response.Flush();
                        Response.Close();
                        Response.End();
                    }
                }
            }
        }

        protected void String_Hex()
        {
            txtOutput.Text = ConvertEx.StringToHex(txtInput.Text);
        }

        protected void Hex_String()
        {
            txtOutput.Text = ConvertEx.HexToString(txtInput.Text);
        }

        protected void String_Binary()
        {
            //txtOutput.Text = CommonLibrary.ConvertExt.StringToStringBit(txtInput.Text);
        }

        protected void Binary_String()
        {
            throw new NotImplementedException();
        }

        protected void String_Base64()
        {
            throw new NotImplementedException();
        }

        protected void Base64_String()
        {
            throw new NotImplementedException();
        }

        protected void Decimal_Binary()
        {
            throw new NotImplementedException();
        }

        protected void Binary_Decimal()
        {
            throw new NotImplementedException();
        }

        protected void Decimal_Hex()
        {
            throw new NotImplementedException();
        }

        protected void Hex_Decimal()
        {
            throw new NotImplementedException();
        }

        protected void Color_Hex()
        {
            throw new NotImplementedException();
        }

        protected void Color_RBG()
        {
            throw new NotImplementedException();
        }

        protected void Color_Name()
        {
            throw new NotImplementedException();
        }











        protected void btnA2Z_Click(object sender, EventArgs e)
        {
            try
            {
                lblMsg.Visible = false;
                txtDes.Text = "";
                System.Threading.Thread.Sleep(2000);
                Int32 iKey = -1;
                Int32.TryParse(hfKey.Value, out iKey);
                switch (iKey)
                {
                    case Tool_Type_C.String_Count_Character_Word: //Đếm số ký tự/từ
                        txtDes.Text = Convert.ToString(txtSrc.Text.Length);
                        break;

                    case Tool_Type_C.String_Upper_Lower_Upper_Firt: //Chữ hoa/Chữ thường/Chữ hoa chữ cái đầu
                        txtDes.Text = txtSrc.Text.ToUpper();
                        break;

                    case Tool_Type_C.Encode_Decode_MD5: //Mã hóa/Giải mã MD5
                        txtDes.Text = Security.MD5_Encrypt(txtSrc.Text);
                        break;

                    case Tool_Type_C.Encode_Decode_SHA1: //Mã hóa/Giải mã SHA1
                        txtDes.Text = Security.SHA1_Encrypt(txtSrc.Text);
                        break;

                    case Tool_Type_C.Encode_Decode_Url: //Mã hóa/Giải mã URL
                        txtDes.Text = Server.UrlEncode(txtSrc.Text);
                        break;

                    case Tool_Type_C.Encode_Decode_Html: //Mã hóa/Giải mã HTML
                        txtDes.Text = Server.HtmlEncode(txtSrc.Text);
                        break;

                    case Tool_Type_C.Generator_Number_Password: //Sinh tự động Số/Mật khẩu
                        if (Convert.ToInt32(txtEnd.Text) < Convert.ToInt32(txtBegin.Text))
                        {
                            txtBegin.Focus();
                            txtSrc.Attributes["onfocus"] = "javascript:this.select();";
                            return;
                        }
                        txtDes.Text = OtherEx.Random_Number(Convert.ToInt32(txtBegin.Text), Convert.ToInt32(txtEnd.Text)).ToString();
                        break;

                    case Tool_Type_C.Generator_BarCode_QRCode: //Tạo BarCode/QRCode
                        imgDes.Visible = false;
                        if (txtSrc.Text.Length > 18)
                        {
                            txtSrc.Focus();
                            txtSrc.Attributes["onfocus"] = "javascript:this.select();";
                            return;
                        }
                        FSE.SOFT.QRCode.Codec.BarCode.Barcode barcode = new FSE.SOFT.QRCode.Codec.BarCode.Barcode();
                        barcode.Alignment = FSE.SOFT.QRCode.Codec.BarCode.AlignmentPositions.CENTER;
                        barcode.LabelPosition = FSE.SOFT.QRCode.Codec.BarCode.LabelPositions.BOTTOMCENTER;
                        barcode.IncludeLabel = false;
                        var type = FSE.SOFT.QRCode.Codec.BarCode.TYPE.CODE128;
                        Int32 W = 150;
                        Int32 H = 50;
                        var img = new Bitmap(barcode.Encode(type, txtSrc.Text, System.Drawing.Color.Black, System.Drawing.Color.White, W, H));
                        byte[] imageBytes = FSE.SOFT.QRCode.Codec.Util.QRCodeUtility.convertBitmapToByte(img);
                        imgDes.ImageUrl = @"data:image/gif;base64," + Convert.ToBase64String(imageBytes);
                        imgDes.Visible = true;
                        bImage = imageBytes;
                        break;

                    case Tool_Type_C.Generator_Guid_MD5: //Sinh tự động Guid/MD5
                        txtDes.Text = Guid.NewGuid().ToString();
                        break;

                    default:
                        SetMsg("Lựa chọn chức năng không đúng", true);
                        return;
                        break;

                    //case 10: //
                    //    break;

                    //case 11: //
                    //    break;

                    //case 12: //
                    //    break;

                    //case 13: //
                    //    break;
                }
                SetMsg("OK!", false);
            }
            catch (Exception ex)
            {
                SetMsg(ex.ToString(), true);
            }
        }

        protected void btnZ2A_Click(object sender, EventArgs e)
        {
            try
            {
                lblMsg.Visible = false;
                txtDes.Text = "";
                System.Threading.Thread.Sleep(2000);
                Int32 iKey = -1;
                Int32.TryParse(hfKey.Value, out iKey);
                switch (iKey)
                {
                    case Tool_Type_C.String_Count_Character_Word: //Đếm số ký tự/từ
                        txtDes.Text = StringEx.TrimEx(txtSrc.Text).Split(' ').Length.ToString();
                        break;

                    case Tool_Type_C.String_Upper_Lower_Upper_Firt: //Chữ hoa/Chữ thường/Chữ hoa chữ cái đầu
                        txtDes.Text = txtSrc.Text.ToLower();
                        break;

                    //case Tool_Type_C.MD5_Encode: //Mã hóa/Giải mã MD5
                    //    break;

                    //case Tool_Type_C.SHA1_Encode: //Mã hóa/Giải mã SHA1
                    //    break;

                    case Tool_Type_C.Encode_Decode_Url: //Mã hóa/Giải mã URL
                        txtDes.Text = Server.UrlDecode(txtSrc.Text);
                        break;

                    case Tool_Type_C.Encode_Decode_Html: //Mã hóa/Giải mã HTML
                        txtDes.Text = Server.HtmlDecode(txtSrc.Text);
                        break;

                    case Tool_Type_C.Generator_Number_Password: //Sinh tự động Số/Mật khẩu
                        txtDes.Text = Security.RandomPassword();
                        break;

                    case Tool_Type_C.Generator_BarCode_QRCode: //Tạo BarCode/QRCode
                        imgDes.Visible = false;
                        FSE.SOFT.QRCode.Codec.QRCodeEncoder qrCodeEncoder = new FSE.SOFT.QRCode.Codec.QRCodeEncoder();
                        qrCodeEncoder.QRCodeEncodeMode = FSE.SOFT.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE;
                        qrCodeEncoder.QRCodeVersion = 5;
                        qrCodeEncoder.QRCodeScale = 5;
                        qrCodeEncoder.QRCodeErrorCorrect = 0;
                        var bmpImage = qrCodeEncoder.Encode(txtSrc.Text);
                        System.IO.MemoryStream stream = new System.IO.MemoryStream();
                        bmpImage.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
                        byte[] imageBytes = stream.ToArray();
                        imgDes.ImageUrl = @"data:image/gif;base64," + Convert.ToBase64String(imageBytes);
                        imgDes.Visible = true;
                        bImage = imageBytes;
                        break;

                    case Tool_Type_C.Generator_Guid_MD5: //Sinh tự động Guid/MD5
                        txtDes.Text = Security.MD5_Encrypt(Security.RandomPassword());
                        break;

                    default:
                        SetMsg("Lựa chọn chức năng không đúng", true);
                        return;
                        break;

                    //case 10: //
                    //    break;

                    //case 11: //
                    //    break;

                    //case 12: //
                    //    break;

                    //case 13: //
                    //    break;
                }
                SetMsg("OK!", false);
            }
            catch (Exception ex)
            {
                SetMsg(ex.ToString(), true);
            }
        }

        protected void btnOther_Click(object sender, EventArgs e)
        {
            try
            {
                lblMsg.Visible = false;
                txtDes.Text = "";
                System.Threading.Thread.Sleep(2000);
                Int32 iKey = -1;
                Int32.TryParse(hfKey.Value, out iKey);
                switch (iKey)
                {
                    //case Tool_Type_C.Count_Character_Word: //Đếm số ký tự/từ
                    //    break;

                    case Tool_Type_C.String_Upper_Lower_Upper_Firt: //Chữ hoa/Chữ thường/Chữ hoa chữ cái đầu
                        txtDes.Text = StringEx.UppercaseFirst(txtSrc.Text);
                        break;

                    //case Tool_Type_C.MD5_Encode: //Mã hóa/Giải mã MD5
                    //    break;

                    //case Tool_Type_C.SHA1_Encode: //Mã hóa/Giải mã SHA1
                    //    break;

                    //case Tool_Type_C.Url_Encode_Decode: //Mã hóa/Giải mã URL
                    //    break;

                    //case Tool_Type_C.Html_Encode_Decode: //Mã hóa/Giải mã HTML
                    //    break;

                    //case Tool_Type_C.Generator_Number_Password: //Sinh tự động Số/Mật khẩu
                    //    break;

                    //case Tool_Type_C.BarCode_QRCode: //Tạo BarCode/QRCode
                    //    break;

                    //case Tool_Type_C.Generator_MD5_Guid: //Sinh tự động Guid/MD5
                    //    break;

                    default:
                        SetMsg("Lựa chọn chức năng không đúng", true);
                        return;
                        break;

                    //case 10: //
                    //    break;

                    //case 11: //
                    //    break;

                    //case 12: //
                    //    break;

                    //case 13: //
                    //    break;
                }
                SetMsg("OK!", false);
            }
            catch (Exception ex)
            {
                SetMsg(ex.ToString(), true);
            }
        }

        protected void imgDes_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                byte[] myImage = bImage;
                using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(myImage))
                {
                    memoryStream.Position = 0;
                    Response.Clear();
                    Response.ContentType = "image/bmp";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bmp");
                    memoryStream.WriteTo(Response.OutputStream);
                    Response.Flush();
                    Response.Close();
                    Response.End();
                }
            }
            catch (Exception ex)
            {
                SetMsg(ex.ToString(), true);
            }
        }

        private void SetMsg(String strMsg, Boolean isErr)
        {
            lblMsg.Visible = true;
            lblMsg.Text = strMsg;
            if (isErr)
                lblMsg.ForeColor = Color.Red;
            else
                lblMsg.ForeColor = Color.Blue;
        }

        private void SetView(Int32 iType)
        {
            udpTool.Visible = true;
            btnA2Z.Visible = true;
            btnZ2A.Visible = true;
            btnOther.Visible = false;
            imgDes.Visible = false;
            txtSrc.Visible = true;
            txtDes.Visible = true;
            switch (iType)
            {
                case Tool_Type_C.String_Count_Character_Word: //Đếm số ký tự/từ
                    break;

                case Tool_Type_C.String_Upper_Lower_Upper_Firt: //Chữ hoa/Chữ thường/Chữ hoa chữ cái đầu
                    btnOther.Visible = true;
                    break;

                case Tool_Type_C.Encode_Decode_MD5: //Mã hóa/Giải mã MD5
                    break;

                case Tool_Type_C.Encode_Decode_SHA1: //Mã hóa/Giải mã SHA1
                    break;

                case Tool_Type_C.Encode_Decode_Url: //Mã hóa/Giải mã URL
                    break;

                case Tool_Type_C.Encode_Decode_Html: //Mã hóa/Giải mã HTML
                    break;

                case Tool_Type_C.Generator_Number_Password: //Sinh tự động Số/Mật khẩu
                    break;

                case Tool_Type_C.Generator_BarCode_QRCode: //Tạo BarCode/QRCode
                    txtDes.Visible = false;
                    imgDes.Visible = true;
                    break;

                case Tool_Type_C.Generator_Guid_MD5: //Sinh tự động Guid/MD5
                    break;

                //case 10: //
                //    break;

                //case 11: //
                //    break;

                //case 12: //
                //    break;

                case Tool_Type_C.Calculator_Flash: //Calculator
                    udpTool.Visible = false;
                    pnlCalculator.Visible = true;
                    break;
                default:
                    break;
            }
        }

        //protected void ddlFunction_SelectedIndexChanged(object sender, EventArgs e)
        //{
        //    SetView(Convert.ToInt32(ddlFunction.SelectedValue));
        //}
    }
}